package com.koron.sinoprobe.web.engineering.service;


import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.koron.bean.query.PageQuery;
import com.koron.sinoprobe.web.engineering.bean.po.SpDivisionProject;
import com.koron.sinoprobe.web.engineering.bean.vo.SpDivisionProjectVO;
import com.koron.sinoprobe.web.engineering.excel.ExcelError;
import org.koron.ebs.mybatis.SessionFactory;

import java.util.List;
import java.util.Map;

/**
 * 项目划分工程(SpDivisionProject)表服务接口
 *
 * @author jzp
 * @since 2021-12-06 09:01:50
 */
public interface SpDivisionProjectService {

    /**
     * 通过ID查询单条数据
     *
     * @param id 主键
     * @return 实例对象
     */
    SpDivisionProject getById(SessionFactory factory, String id);

    /**
     * 查询所有数据
     *
     * @param spDivisionProject 查询条件对象
     * @return 列表结果集
     */
    List<SpDivisionProject> list(SessionFactory factory, SpDivisionProject spDivisionProject);

    List<SpDivisionProject> listByDivisionId(SessionFactory factory, String divisionId);

    List<SpDivisionProjectVO> treeByDivisionId(SessionFactory factory, String divisionId);

    /**
     * 分页查询
     *
     * @param spDivisionProject 分页条件
     * @return 对象列表
     */
    default PageInfo<SpDivisionProject> page(SessionFactory factory, PageQuery pageQuery, SpDivisionProject spDivisionProject) {
        PageHelper.startPage(pageQuery.getPage(), pageQuery.getPageSize(), pageQuery.getOrderBy());
        List<SpDivisionProject> spDivisionProjectList = list(factory, spDivisionProject);
        return new PageInfo<>(spDivisionProjectList);
    }

    /**
     * 新增数据
     *
     * @param spDivisionProject 实例对象
     * @return 是否成功
     */
    boolean save(SessionFactory factory, SpDivisionProject spDivisionProject);

    boolean saveTree(SessionFactory factory, List<SpDivisionProjectVO> spDivisionProjectVOList);

    boolean saveBatch(SessionFactory factory, List<SpDivisionProjectVO> lists);

    /**
     * 修改数据
     *
     * @param spDivisionProject 实例对象
     * @return 是否成功
     */
    boolean update(SessionFactory factory, SpDivisionProject spDivisionProject);

    /**
     * 通过主键删除数据
     *
     * @param ids 主键
     * @return 是否成功
     */
    boolean deleteBatchIds(SessionFactory factory, List<String> ids);

    boolean removeByDivisionId(SessionFactory factory, String divisionId);

    ExcelError readExcel(List<Map<Integer, String>> listMap, List<SpDivisionProjectVO> lists);
}
